package com.weiyuwqj.server.mapper;

import com.weiyuwqj.api.model.BusItemCollect;
import com.weiyuwqj.api.model.vo.AccountCheckingVo;
import com.weiyuwqj.api.model.vo.BusItemCollectVo;
import com.weiyuwqj.api.model.vo.DebtCollectStatVo;
import com.weiyuwqj.api.model.vo.InvestCollectVo;
import com.weiyuwqj.api.model.vo.RepayCollectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Repository
public interface BusItemCollectMapper extends Mapper<BusItemCollect> {

    List<Map<String, Object>> getCollectList(int itemId, int investUserId);
    //显示&查询
    List<BusItemCollectVo> getList(Map<String, Object> param);


    List<BusItemCollect> getRepayListByItemIdAndCurrentPeriod(Integer itemId, Integer currentPeriod);

    List getListByUserId(Integer userId);

    Map<String, Object> getCollectByUserId(Integer userId);

    //根据用户id查询预期收益、已获得收益
    List<Map<String, Object>> getProfitByUserId(Integer userId);

    List<Map> getListByUserIdAndTime(Map map);

    List<Map> getMainRepayList(Map map);

    List<Map> getListByUserIdAndNow(Map map);

    //后台首页统计今日明日待还金额
    Map countRepayAmount();

    Map statCollect(Map<String, Object> map);

    //app昨日收益统计
    BigDecimal countYesterdayIncome(Integer userId);

    //统计自动投标并且未还款的金额
    BigDecimal countAutoAmount(Map map);

    //根据itemId查询使用过加息券的记录
    List<BusItemCollect> getListByItemIdAndAddRate(@Param("itemId")Integer itemId,@Param("period")Integer period);

    //统计锁定自动投标，当日应还，却未还款的金额
    List<BusItemCollect> getListAutoAmountByTime(Map map);


    //根据investId获取列表
    List<BusItemCollect> getListByInvestId(Integer investId);

    //根据itemId和期数删除数据
    Integer deleteByItemId(@Param("itemId") Integer itemId,@Param("collectCurrentPeriod") Integer collectCurrentPeriod);

    //根据itemId，userId，期数修改数据
    Integer modifyCollectByItemIdAndUserId(Map map);

    //根据itemId查找期数最大的记录
    BusItemCollect getCollectMaxPeriodByItemId(@Param("itemId")Integer itemId,@Param("userId")Integer userId);

    //获取今日需要还款的体验金
    List<BusItemCollect> getListByToDay();

    //昨日收益
    List<Map> sumYesterdayInterest(Map map);

    //统计累计收益
    List<Map> sumTotalInterest(Map map);

    //统计待收金额
    List<Map> sumWait(Map map);

    //统计本月收益
    BigDecimal countMonthIncome(Map map);

    //查询本金
    BigDecimal selectPrincipalByItemIdAndUserId(@Param("itemId")Integer itemId, @Param("userId")Integer userId);

    //提前全部还款修改数据
    Integer modifyCollectByPrepayment(Map map);

    /**
     * 根据investId查询未债权的待收列表
     * @param investId  投资id
     * @return
     */
    List<BusItemCollect> getCollectListByInvestId(Integer investId);


    DebtCollectStatVo statNoPayCollect(Map param);

    /**
     * 根据id修改待收状态
     * @param newStatus
     * @param oldStatus
     * @param id
     * @return
     */
    Integer modifyDebtCollectStatusById(@Param("newStatus")Integer newStatus, @Param("oldStatus")Integer oldStatus, @Param("id")Integer id);

    //查询可以回款的待收记录
    List<RepayCollectVo> listUsefulCollect(Integer itemId, Integer currentPeriod);

    int updateActualCollect(Map map);

	/**
	 * 剩余未完成期数
	 *
	 * @param investId 投资ID
	 * @return 剩余未完成期数
	 */
	Integer getCollectListNotOverCount(@Param("investId") Integer investId);

    AccountCheckingVo getStatByItemId(Integer id);

    //对账管理统计
    Map checkAccountStat(Map map);

    //根据项目id按项目和用户分类获取待收
    List<InvestCollectVo> getCollectByItemId(Integer itemId);

    //根据项目id统计待收
    Map statCollectByItemId(Integer itemId);

    //根据项目id和userId获取待收记录
    List<BusItemCollect> getCollectByItemIdAndUserId(@Param(value = "itemId") Integer itemId, @Param(value = "userId")Integer userId);

    /**
     * 根据investId查询最后一期
     * @param investId
     * @return
     */
    BusItemCollect getCollectByInvestId(Integer investId);
}